home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / aclocal / longlong.m4 < prev    next >
Encoding:
M4 Source File  |  2010-09-19  |  4.4 KB  |  107 lines

  1. # longlong.m4 serial 14
  2. dnl Copyright (C) 1999-2007, 2009-2010 Free Software Foundation, Inc.
  3. dnl This file is free software; the Free Software Foundation
  4. dnl gives unlimited permission to copy and/or distribute it,
  5. dnl with or without modifications, as long as this notice is preserved.
  6.  
  7. dnl From Paul Eggert.
  8.  
  9. # Define HAVE_LONG_LONG_INT if 'long long int' works.
  10. # This fixes a bug in Autoconf 2.61, but can be removed once we
  11. # assume 2.62 everywhere.
  12.  
  13. # Note: If the type 'long long int' exists but is only 32 bits large
  14. # (as on some very old compilers), HAVE_LONG_LONG_INT will not be
  15. # defined. In this case you can treat 'long long int' like 'long int'.
  16.  
  17. AC_DEFUN([AC_TYPE_LONG_LONG_INT],
  18. [
  19.   AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
  20.     [AC_LINK_IFELSE(
  21.        [_AC_TYPE_LONG_LONG_SNIPPET],
  22.        [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
  23.         dnl If cross compiling, assume the bug isn't important, since
  24.         dnl nobody cross compiles for this platform as far as we know.
  25.         AC_RUN_IFELSE(
  26.           [AC_LANG_PROGRAM(
  27.              [[@%:@include <limits.h>
  28.                @%:@ifndef LLONG_MAX
  29.                @%:@ define HALF \
  30.                         (1LL << (sizeof (long long int) * CHAR_BIT - 2))
  31.                @%:@ define LLONG_MAX (HALF - 1 + HALF)
  32.                @%:@endif]],
  33.              [[long long int n = 1;
  34.                int i;
  35.                for (i = 0; ; i++)
  36.                  {
  37.                    long long int m = n << i;
  38.                    if (m >> i != n)
  39.                      return 1;
  40.                    if (LLONG_MAX / 2 < m)
  41.                      break;
  42.                  }
  43.                return 0;]])],
  44.           [ac_cv_type_long_long_int=yes],
  45.           [ac_cv_type_long_long_int=no],
  46.           [ac_cv_type_long_long_int=yes])],
  47.        [ac_cv_type_long_long_int=no])])
  48.   if test $ac_cv_type_long_long_int = yes; then
  49.     AC_DEFINE([HAVE_LONG_LONG_INT], [1],
  50.       [Define to 1 if the system has the type `long long int'.])
  51.   fi
  52. ])
  53.  
  54. # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
  55. # This fixes a bug in Autoconf 2.61, but can be removed once we
  56. # assume 2.62 everywhere.
  57.  
  58. # Note: If the type 'unsigned long long int' exists but is only 32 bits
  59. # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
  60. # will not be defined. In this case you can treat 'unsigned long long int'
  61. # like 'unsigned long int'.
  62.  
  63. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
  64. [
  65.   AC_CACHE_CHECK([for unsigned long long int],
  66.     [ac_cv_type_unsigned_long_long_int],
  67.     [AC_LINK_IFELSE(
  68.        [_AC_TYPE_LONG_LONG_SNIPPET],
  69.        [ac_cv_type_unsigned_long_long_int=yes],
  70.        [ac_cv_type_unsigned_long_long_int=no])])
  71.   if test $ac_cv_type_unsigned_long_long_int = yes; then
  72.     AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
  73.       [Define to 1 if the system has the type `unsigned long long int'.])
  74.   fi
  75. ])
  76.  
  77. # Expands to a C program that can be used to test for simultaneous support
  78. # of 'long long' and 'unsigned long long'. We don't want to say that
  79. # 'long long' is available if 'unsigned long long' is not, or vice versa,
  80. # because too many programs rely on the symmetry between signed and unsigned
  81. # integer types (excluding 'bool').
  82. AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
  83. [
  84.   AC_LANG_PROGRAM(
  85.     [[/* For now, do not test the preprocessor; as of 2007 there are too many
  86.          implementations with broken preprocessors.  Perhaps this can
  87.          be revisited in 2012.  In the meantime, code should not expect
  88.          #if to work with literals wider than 32 bits.  */
  89.       /* Test literals.  */
  90.       long long int ll = 9223372036854775807ll;
  91.       long long int nll = -9223372036854775807LL;
  92.       unsigned long long int ull = 18446744073709551615ULL;
  93.       /* Test constant expressions.   */
  94.       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
  95.                      ? 1 : -1)];
  96.       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
  97.                      ? 1 : -1)];
  98.       int i = 63;]],
  99.     [[/* Test availability of runtime routines for shift and division.  */
  100.       long long int llmax = 9223372036854775807ll;
  101.       unsigned long long int ullmax = 18446744073709551615ull;
  102.       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
  103.               | (llmax / ll) | (llmax % ll)
  104.               | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
  105.               | (ullmax / ull) | (ullmax % ull));]])
  106. ])
  107.